#ifndef _W25Qxx_H
#define _W25Qxx_H

#define W25QXX_DEBUG 0  // 是否支持调试
#if W25QXX_DEBUG
    #define W25QXX_ERROR_PRINTF u1_printf  // 打印错误信息
#endif


/* 引脚定义 片选CS*/
#define W25QXX_CS_RCC  	  	    RCC_APB2Periph_GPIOA		//定义SPI1数据端口
#define W25QXX_CS_PORT 	        GPIOA
#define W25QXX_CS_PIN 	        GPIO_Pin_4
/* 引脚使用 */
#define W25QXX_CS_WRITE(x)      GPIO_WriteBit(W25QXX_CS_PORT, W25QXX_CS_PIN,(BitAction)x)

/* SPI发送函数  可修改 */
#define W25QXX_READ_WRITE_BYTE  spi1_send_byte

/* Flash  的命令字*/
#define W25QXX_WRITE_ENABLE                   0x06    //写使能命令
#define W25QXX_WRITE_DISABLE                  0x04    //写禁止命令
#define W25QXX_READ_STATUS_REGISTER           0x05    //读状态寄存器命令
#define W25QXX_WRITE_STATUS_REGISTER          0x01    //写状态寄存器命令
#define W25QXX_READ_DATA                      0x03    //读取数据命令
#define W25QXX_FAST_READ_DATA                 0x0B    //快速读取数据命令
#define W25QXX_FAST_READ_DUAL_OUTPUT          0x3B    //快速读取双输出数据命令
#define W25QXX_PAGE_PROGRAM                   0x02    //页编程命令
#define W25QXX_BLOCK_ERASE_64K                0xD8    //64k块擦除命令
#define W25QXX_BLOCK_ERASE_32K                0x52    //32k块擦除命令
#define W25QXX_SECTOR_ERASE                   0x20    //扇区擦除命令
#define W25QXX_CHIP_ERASE                     0xC7    //芯片擦除命令
#define W25QXX_POWER_DOWN                     0xB9    //芯片掉电命令
#define W25QXX_RELEASE_POWER_DOWN             0xAB    //芯片掉电释放/器件ID命令
#define W25QXX_DEVICE_ID                      0x90    //芯片制造商/器件ID命令
#define W25QXX_JEDEC_ID                       0x9F    //芯片JEDEC.ID序列命令
#define W25QXX_DUMMY_BYTE                     0xff    //自定义伪字节


/* 函数声明 */
void W25QXX_Init(void);  // 初始化函数
uint32_t W25QXX_JedecId(void); // 读ID

/** flash 了解知识 ：
*   一页 256B（字节）       
*  一个扇区16页（4KB）     
*  一块256页 （64KB）       
*    写入数据整页整页的写   
*      第一页       0------------FFH  
*      第二页       100H-------1FFH
*      第三页        200H-----2FFH
*      第十六页    F00H-------FFFH
*      第一扇区      0--------FFFH
*     第二扇区    1000H----1FFFH
*      第三扇区    2000H-----2FFFH
*      第十六扇区  F000H-----FFFFH
*      第一块     0---------------FFFFH
*      第二块    10000H------1FFFFH
*      第十六块 F0000H-----FFFFFH
*      第十七块100000H----10FFFFH
*      第十八块 110000H----11FFFFH
*	 第三十二块1F0000H----1FFFFFH
*/
#endif  /* _W25Qxx_H */
